package service;

import java.util.Properties;

import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
import javax.servlet.http.HttpSession;

import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;

import dao.MailDao;
import dto.FileDto;

public class SendMailServiceImpl implements SendMailService{
	
	private JavaMailSenderImpl mailSender;
	
	private MailDao mailDao;//메일 데이터 베이스는 보내는 사람의 정보를 저장할 의도로제작(실제 사용은 안함)
	
	public void setmailDao(MailDao mailDao){
		this.mailDao = mailDao;
	}
	
	/*EmailDto emaildto, UserDto userDto, FileDto fileDto*/
	@Override
	public void sendEmail(String id, String name, FileDto filedto, HttpSession session) {
		// TODO Auto-generated method stub
		String root_path = session.getServletContext().getRealPath("/");	//웹 서비스 root경로
        String attach_path = "/WEB-INF/" + filedto.getMember_id() + "/";
		mailSender = new JavaMailSenderImpl();//XML설정 파일 사용시 JavaMailSender 인터페이스로 인스턴스를 생성하지 않는다.
												//XML설정 파일 사용시 setJavaMailProperties사용 불가능
		//---------------------
		Properties props = new Properties(); //기본 서버 연결 세팅
		//------
		props.put("mail.smtp.starttls.enable","true");//설정하지 않으면 에러 발생 (아래 참조)
		props.put("mail.smtp.ssl.trust", "smtp.gmail.com");
		props.put("mail.smtp.auth","true");
		props.put("mail.smtp.quitwait","false");
		props.put("mail.debug","true"); 
		//------smtp.gmail.com 서버 연결 셋팅
		mailSender.setJavaMailProperties(props);

		mailSender.setProtocol("smtp");
		mailSender.setHost("smtp.gmail.com");
		mailSender.setPort(587);
		//gmail은 587포트
		//naver는 465포트 =>SSL설정 요망
		//자체 SMTP서버 사용시 포트는 설정 가능 기본 포트는 25
		mailSender.setUsername("smtp.test1103@gmail.com");
		mailSender.setPassword("test1103");
		
		mailSender.setDefaultEncoding("utf-8");
		//--------------------
		MimeMessage message = mailSender.createMimeMessage();
		try{
			MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");
			
			messageHelper.setSubject("메일 제목");
			String htmlContent = "내용";
			messageHelper.setText(htmlContent, true);
			messageHelper.setFrom("mateon01@gmail.com",name);//name 이 보내는 사람 이름
			messageHelper.setTo(new InternetAddress(id, name, "UTF-8"));//id가 받는사람 이메일, name 쓸모없음
			DataSource dataSource = new FileDataSource(root_path+attach_path+filedto.getFile_name());//경로
			messageHelper.addAttachment(MimeUtility.encodeText(filedto.getFile_name(),"UTF-8","B"), dataSource);//파일 전송은 dataSource로 전송
			mailSender.send(message);
		}catch(MailException e){
			e.printStackTrace();
		}catch (Throwable e) {
			// TODO: handle exception
			e.printStackTrace();
			return;
		}
	}
}
